package com.strongbj.iot.devices.newlight.response.handle;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.strongbj.core.message.IMessageHandle;
import com.strongbj.core.util.ByteUtil;
import com.strongbj.core.util.ContextUtils;
import com.strongbj.iot.devices.newlight.entity.Tag;
import com.strongbj.iot.devices.newlight.message.NewLightReaderMessage;
import com.strongbj.iot.devices.newlight.response.common.HandleTimeStamp;
import com.strongbj.iot.devices.newlight.service.TagService;

import io.netty.channel.ChannelHandlerContext;

/**
 * 0x07，单独盘点
 * @author lei_w
 *
 */
public class SingleInventoryResponseHandle implements IMessageHandle<NewLightReaderMessage, Object> {

	private static Logger logger = LogManager.getLogger(SingleInventoryResponseHandle.class.getName());
	private TagService tagService = (TagService) ContextUtils.getBean("tagService");
	
	@Override
	public boolean isHandle(NewLightReaderMessage t) {
		if (Integer.valueOf("7", 16).byteValue() == t.getType()) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public Object handle(ChannelHandlerContext ctx, NewLightReaderMessage t) {
		String hostNumber = ByteUtil.byteArrToHexString(t.getAddress()); // reader 地址码
		String timeStamp = ByteUtil.byteArrToHexString(t.getTime()); // 时间戳
		
		//String tagAddress = ByteUtil.byteArrToHexString(t.getBody(), 0, 4); // LED 标签地址
		String tagAddress = ByteUtil.bytesToIp(ByteUtil.subBytes(t.getBody(), 0, 4)); // LED 标签地址
		String inventoryResult = ByteUtil.byteArrToHexString(t.getBody(), 4, 1); // 盘点结果
		String tagState = ByteUtil.byteToBitString(ByteUtil.subBytes(t.getBody(), 5, 1)[0]); // 标签其他状态	
		String powerState = tagState.substring(5, 8);
		String fbState = tagState.substring(3, 5);
		String fsState = tagState.substring(2, 3);
		String ledState = ByteUtil.byteToBitString(ByteUtil.subBytes(t.getBody(), 6, 1)[0]); // 标签LED状态
		String led1State = ledState.substring(6, 8);
		String led2State = ledState.substring(4, 6);
		String led3State = ledState.substring(2, 4);
		String led4State = ledState.substring(0, 2);

		String log = "\r\n===================================================" +
				"\r\n收到单独盘点返回报文：" +
				"\r\nREADER地址码： " + hostNumber + 
				"\r\nLED标签地址： " + tagAddress + 
				"\r\n盘点结果：" + inventoryResult +
				"\r\n标签电量状态：  " + powerState + 
				"\r\n功能按键状态：  " + fbState + 
				"\r\n防撕状态：" + fsState +
				"\r\nLED1状态：" + led1State +
				"\r\nLED2状态：" + led2State +
				"\r\nLED3状态：" + led3State +
				"\r\nLED4状态：" + led4State +
				"\r\n时间戳："	 + HandleTimeStamp.handle(timeStamp) + 
				"\r\n===================================================";
		logger.info(log);
		
		this.updateTagState(tagAddress); // 更新标签状态
		return null;
	}
	
	/**
	 * 更新标签在数据库中的状态字段
	 * @param tagIp
	 */
	private void updateTagState(String tagIp) {
		QueryWrapper<Tag> wrapper = new QueryWrapper<Tag>();
		wrapper.eq("ip_",tagIp);
		Tag tag = tagService.getOne(wrapper);
		if(tag==null) return;
		
		tag.setState(1);
		tagService.updateById(tag);
	}

	@Override
	public void destory() {
		// TODO Auto-generated method stub
		
	}

}
